home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / Softshoe / Lisa's Mac Parts / Files / Volumes / VolumeInfo.cp < prev    next >
Text File  |  2000-06-23  |  3KB  |  132 lines

  1. // VolumeInfo.cp
  2.  
  3. #ifndef VolumeInfo_h
  4. #include "VolumeInfo.h"
  5. #endif
  6. #ifndef NoSuchVolume_h
  7. #include "NoSuchVolume.h"
  8. #endif
  9. #ifndef BadVolumeNameError_h
  10. #include "BadVolumeNameError.h"
  11. #endif
  12.  
  13. VolumeInfo::VolumeInfo()
  14.   {
  15.     volumeParam.ioCompletion = 0;
  16.     volumeParam.ioNamePtr = name.Raw();
  17.   }
  18.  
  19. VolumeInfo::VolumeInfo( ConstPString targetName )
  20.   {
  21.     volumeParam.ioCompletion = 0;
  22.     volumeParam.ioNamePtr = name.Raw();
  23.     Get( targetName );
  24.   }
  25.  
  26. VolumeInfo::VolumeInfo( ::Volume volume )
  27.   {
  28.     volumeParam.ioCompletion = 0;
  29.     volumeParam.ioNamePtr = name.Raw();
  30.     Get( volume );
  31.   }
  32.  
  33. VolumeInfo::VolumeInfo( uint16 index )
  34.   {
  35.     volumeParam.ioCompletion = 0;
  36.     volumeParam.ioNamePtr = name.Raw();
  37.     Get( index );
  38.   }
  39.  
  40. VolumeInfo::VolumeInfo( const VolumeInfo& source )
  41.   : name( source.name ),
  42.      HParamBlockRec( source )
  43.   {
  44.     volumeParam.ioNamePtr = name.Raw();
  45.   }
  46.  
  47. void VolumeInfo::operator==( const VolumeInfo& source )
  48.   {
  49.     static_cast< HParamBlockRec& >( *this ) = source;
  50.     name = source.name;
  51.     volumeParam.ioNamePtr = name.Raw();
  52.   }
  53.  
  54. void VolumeInfo::Get()
  55.   {
  56.     volumeParam.ioVolIndex = 0;
  57.     ThrowError( PBHGetVInfoSync( this ) );
  58.   }
  59.  
  60. void VolumeInfo::Get( ConstPString targetName )
  61.   {
  62.     name = targetName;
  63.     volumeParam.ioVolIndex = -1;
  64.     volumeParam.ioVRefNum = 0;
  65.     ThrowError( PBHGetVInfoSync( this ) );
  66.   }
  67.  
  68. void VolumeInfo::Get( ::Volume volume )
  69.   {
  70.     volumeParam.ioVolIndex = 0;
  71.     volumeParam.ioVRefNum = volume.RefNum();
  72.     ThrowError( PBHGetVInfoSync( this ) );
  73.   }
  74.  
  75. void VolumeInfo::Get( uint16 index )
  76.   {
  77.     volumeParam.ioVolIndex = index;
  78.     ThrowError( PBHGetVInfoSync( this ) );
  79.   }
  80.  
  81. bool VolumeInfo::TryToGet( uint16 index )
  82.   {
  83.     volumeParam.ioVolIndex = index;
  84.     OSErr error = PBHGetVInfoSync( this );
  85.     
  86.     if ( error == nsvErr )
  87.         return false;
  88.     
  89.     ThrowError( error );
  90.     return true;
  91.   }
  92.  
  93. void VolumeInfo::Set()
  94.   {
  95.     ThrowError( PBSetVInfoSync( this ) );
  96.   }
  97.  
  98. void VolumeInfo::Set( ::Volume volume )
  99.   {
  100.     volumeParam.ioVRefNum = volume.RefNum();
  101.     ThrowError( PBSetVInfoSync( this ) );
  102.   }
  103.  
  104. void VolumeInfo::ThrowError( OSErr error )
  105.   {
  106.     if ( error == noErr )
  107.         return;
  108.  
  109.     switch ( error )
  110.       {
  111.         case nsvErr:                throw NoSuchVolume( error );
  112.         case bdNamErr:                throw BadVolumeNameError( error );
  113.       }
  114.     
  115.     throw VolumeError( error );
  116.   }
  117.  
  118. ::Drive VolumeInfo::Drive() const
  119.   {
  120.     return ::Drive( Online()
  121.                             ? volumeParam.ioVDrvInfo
  122.                             : Ejected()
  123.                                 ? volumeParam.ioVDRefNum
  124.                                 : -volumeParam.ioVDRefNum );
  125.   }
  126.  
  127. ::Driver VolumeInfo::Driver() const
  128.   {
  129.     Assert( Online() );
  130.     return ::Driver( volumeParam.ioVDRefNum );
  131.   }
  132.